14 分布式架构工程设计
一些分布式架构设计原则:
- Designs, Lessons and Advice from Building Large Distributed Systems / Building Software Systems At Google and Lessons Learned 回顾了 Google 发展的历史
- The Twelve-Factor App 12-Factor 为构建 SaaS 应用提供了方法论
- Notes on Distributed Systems for Young Bloods 给准备进入分布式系统领域的人的一些忠告
- On Designing and Deploying Internet-Scale Services 微软 Windows Live 服务平台的一些经验性的总结文章
- 4 Things to Keep in Mind When Building a Platform for the Enterprise 阐述了为企业构建平台时需要牢记的四件关于软件设计方面的事
- Principles of Chaos Engineering Netflix 分享了一些软件架构的经验和原则
- Building Fast & Resilient Web Applications 关于如何通过弹力设计来实现快速和可容错的网站架构的演讲
- Design for Resiliency 全面认识“弹力(Resiliency)”,以及弹力对于系统的重要性,并详细阐述了如何设计和实现系统的弹力
- Design Principle 微软 Azure 网站上的系列文章
- Eventually Consistent 关于最终一致性的文章
- Writing Code that Scales 告诉我们一些很不错的写出高扩展和高性能代码的工程原则
- Automate and Abstract: Lessons from Facebook on Engineering for Scale 软件自动化和软件抽象方面的一些经验教训
设计模式
- 微软云平台 Azure 上的设计模式
- Cloud Design Patterns
- 设计模式:可用性;
- 设计模式:数据管理;
- 设计模式:设计和实现;
- 设计模式:消息;
- 设计模式:管理和监控;
- 设计模式:性能和扩展;
- 设计模式:系统弹力;
- 设计模式:安全。
- AWS Cloud Pattern AWS 云平台的一些设计模式
- Design patterns for container-based distributed systems 描述了容器化下的分布式架构的设计模式
- Patterns for distributed systems 讲了一些分布式系统的架构模式
- A Pattern Language for Micro-Services
- SOA Patterns
设计与工程实践
分布式系统的故障测试
- FIT: Failure Injection Testing Netflix 公司的一篇关于做故障注入测试的文章
- Automated Failure Testing Netflix 公司的自动化故障测试的一篇博文
- Automating Failure Testing Research at Internet Scale Netflix 公司伙同圣克鲁斯加利福尼亚大学和 Gremlin 游戏公司一同撰写的一篇论文
弹性伸缩
- 4 Architecture Issues When Scaling Web Applications: Bottlenecks, Database, CPU, IO 讲解后端程序的主要性能指标,即响应时间和可伸缩性这两者如何能提高的解决方案
- Scaling Stateful Objects 讨论了有状态和无状态的节点如何伸缩的问题
- Scale Up vs Scale Out: Hidden Costs 详细分析了可伸缩性架构的不同扩展方案(横向扩展或纵向扩展)所带来的成本差异,帮助更好地选择合理的扩展方案
- Best Practices for Scaling Out 讨论 Scale out 最佳实践的文章
- Scalability Worst Practices 讨论了一些最差实践
- Reddit: Lessons Learned From Mistakes Made Scaling To 1 Billion Pageviews A Month 一些关于系统扩展的经验教训
- 关于自动化弹性伸缩的文章:
- Autoscaling Pinterest;
- Square: Autoscaling Based on Request Queuing;
- PayPal: Autoscaling Applications;
- Trivago: Your Definite Guide For Autoscaling Jenkins;
- Scryer: Netflix’s Predictive Auto Scaling Engine。
一致性哈希
- Consistent Hashing 一致性哈希的简单教程, 有代码示例
- Consistent Hashing: Algorithmic Tradeoffs 讲述了一致性哈希的一些缺陷和坑,以及各种哈希算法的性能比较
- Distributing Content to Open Connect Netflix 的一个对一致性哈希的实践
- Consistent Hashing in Cassandra Cassandra 中使用到的一致性哈希的相关设计
数据库分布式
- Life Beyond Distributed Transactions 讨论 一种基于本地事务情况下的事务机制,它基于实体和活动(Activity)的概念
- How Sharding Works 探讨数据 Sharding 的文章
- Why you don’t want to shard 不到万不得已不要做数据库分片
- How to Scale Big Data Applications 关于怎样给大数据应用做架构扩展
- MySQL Sharding with ProxySQL 用 ProxySQL 来支撑 MySQL 数据分片的实践
缓存
- 缓存更新的套路 缓存更新的几个设计模式
- Design Of A Modern Cache 设计一个现代化的缓存系统需要注意到的东西
- Netflix: Caching for a Global Netflix Netflix 公司的全局缓存架构实践
- Facebook: An analysis of Facebook photo caching Facebook 公司的图片缓存使用分析
- How trivago Reduced Memcached Memory Usage by 50% Trivago 公司一篇分享自己是如何把 Memcached 的内存使用率降了一半的实践性文章
- Caching Internal Service Calls at Yelp Yelp 公司的缓存系统架构
消息队列
- Understanding When to use RabbitMQ or Apache Kafka 什么时候使用 RabbitMQ,什么时候使用 Kafka
- Trello: Why We Chose Kafka For The Trello Socket Architecture Trello 的 Kafka 架构分享
- LinkedIn: Running Kafka At Scale LinkedIn 公司的 Kafka 架构扩展实践
- Should You Put Several Event Types in the Same Kafka Topic?
- Billions of Messages a Day - Yelp’s Real-time Data Pipeline Yelp 公司每天十亿级实时消息的架构
- Uber: Building Reliable Reprocessing and Dead Letter Queues with Kafka Uber 公司的 Kafka 应用
- Uber: Introducing Chaperone: How Uber Engineering Audits Kafka End-to-End Uber 公司对 Kafka 消息的端到端审计
- Publishing with Apache Kafka at The New York Times 纽约时报的 Kafka 工程实践
- Kafka Streams on Heroku ,Heroku 公司的 Kafka Streams 实践
- Salesforce: How Apache Kafka Inspired Our Platform Events Architecture ,Salesforce 的 Kafka 工程实践
- Exactly-once Semantics are Possible: Here’s How Kafka Does it ,怎样用 Kafka 让只发送一次的语义变为可能
- Delivering billions of messages exactly once 一篇挑战消息只发送一次这个技术难题的文章
- Benchmarking Streaming Computation Engines at Yahoo! Yahoo! 的 Storm 团队在为他们的流式计算做技术选型时,发现市面上缺乏针对不同计算平台的性能基准测试,于是研究并设计了一种方案来做基准测试
关于日志方面
- Using Logs to Build a Solid Data Infrastructure - Martin Kleppmann ,设计基于 log 结构应用架构
- Building DistributedLog: High-performance replicated log service , 讲述了高性能日志系统的一些技术细节
- LogDevice: a distributed data store for logs ,Facebook 分布式日志系统方面的一些工程分享
关于性能方面
- Understand Latency ,一些和系统响应时间相关的文章
- Common Bottlenecks ,讲述了 20 个常见的系统瓶颈
- Performance is a Feature ,关注性能
- Make Performance Part of Your Workflow ,一些和性能有关的设计上的平衡和美学
- CloudFlare: How we built rate limiting capable of scaling to millions of domains,讲述了 CloudFlare 公司是怎样实现他们的限流功能的
关于搜索方面
- Instagram: Search Architecture
- eBay: The Architecture of eBay Search
- eBay: Improving Search Engine Efficiency by over 25%
- LinkedIn: Introducing LinkedIn’s new search architecture
- LinkedIn: Search Federation Architecture at LinkedIn
- Slack: Search at Slack
- DoorDash: Search and Recommendations at DoorDash
- Twitter: Search Service at Twitter (2014)
- Pinterest: Manas: High Performing Customized Search System
- Sherlock: Near Real Time Search Indexing at Flipkart
- Airbnb: Nebula: Storage Platform to Build Search Backends
各公司的架构实践
High Scalability 网站会定期分享一些大规模系统架构是怎样构建的
- YouTube Architecture
- Scaling Pinterest
- Google Architecture
- Scaling Twitter
- The WhatsApp Architecture
- Flickr Architecture
- Amazon Architecture
- Stack Overflow Architecture
- Pinterest Architecture
- Tumblr Architecture
- Instagram Architecture
- TripAdvisor Architecture
- Scaling Mailbox
- Salesforce Architecture
- ESPN Architecture
- Uber Architecture
- Dropbox Design
- Splunk Architecture